lpunbfandomcom-20200214-history
Grupo 3 - Seminário de Python - LP 1/2015
Componentes do grupo Miguel Montagner - 13/0127302 Nícolas Schumacher - 13/0047660 Patrícia Guimarães - 13/0015989 Rebeca Baldomir - 13/0016799 Vítor Pontes - 13/0137421 Histórico e versões 1. Histórico 1982: Guido Van Rossum, começou a trabalhar no CWI (Centrum Wiskunde & Informatica, Centro de Matemática e Ciência da Computação) em Amsterdã, Holanda para desenvolver a linguagem ABC. 1987: Com o fim da linguagem ABC, Guido foi transferido para o grupo de trabalho de Amoeba (sistema operacional Microkernel), liderado por Andrew Tanenbaum, quando percebeu a necessidade de uma linguagem de alto nível para seu projeto, que seria a ligação entre C e Bourne Shell. A implementação da linguagem, chamada então de Python graças ao grupo de comédia “Monty Python”, foi iniciada em dezembro de 1989. 1991: Guido é transferido para um grupo multimídia no CWI e, no mesmo ano, Python tem sua primeira aparição histórica. Guido se manteve no Centro até 1995 desenvolvendo a linguagem. Em seu bolg, Guido comenta: “Python é um produto direto de minha experiência no CWI. Como eu explico mais tarde, ABC deu-me a inspiração chave para Python, Amoeba a motivação imediata, e o grupo multimídia promoveu seu crescimento.” 1995: passa a trabalhar na CNRI (Corporation for National Research Initiatives, Corporação para iniciativas de pesquisa nacional) um laboratório de pesquisa sem fins lucrativos na Virginia e lança várias versões até 2000. 2000: Ainda na CNRI, lança a versão 1.6, a primeira versão da linguagem sem ser GPL''-compatible''. Apesar de todas as versões de Python serem Open Source, nem todas são compatíveis com GPL. GPL é a Licença Pública Geral. As licenças de Python permitem ao usuário distribuir uma uma versão modificada de Python sem ter que essas mudanças sejam Open Source. As licenças de compatibilidade com GPL tornam possível combinar Python com outros softwares que também sejam compatíveis com GPL. Ainda em 2000, Guido e seu time mudam para a BeOpen.com para formarem a Equipe BeOpen PythonLabs e, sob a propriedade da mesma, lançam a versão 2.0 de Python, ainda não compatível com GPL. No mesmo ano, a equipe PythonLabs se muda para a Digital Creations (depois chamada de Zope Corporation). Em 2001, é formada a PSF (Python Software Foundation), uma organização sem fins lucrativos criada especificamente para ser proprietária de toda a parte intelectual ligada a Python e a Zope Corporation entra como um membro patrocinador. É lançada a versão 2.1 de Python, a primeira a pertencer à PSF e a última versão não compatível com GPL. De 2001 a 2008, foram lançadas as versões de 2.0 até 2.6 de Python. Em dezembro de 2008, é lançada a primeira versão 3000 (ou 3.x) de Python, que possui diferenças em relações às versões 2.x e é incompatível com a mesma. Em 2010, há um novo lançamento de uma versão 2.x, agora 2.7, a última versão 2.x lançada. Em 2015, houve o lançamento da versão 3.4.3 e da versão 2.7.10 2. Versões Versão 0.9.0: Primeira versão da linguagem, incorporou um sistema de módulos da linguagem Modula-3 Versão 1.6: Contém todo o trabalho que havia sido desenvolvido na CNRI. O recurso mais significativo criado foi o suporte para Unicode. Versão 2.0: Sistema coletor de lixo, novo suporte a XML, atribuição aumentada (x+=1), compreensão de listas, declaração de importação e instrução de impressão estendidas. No caso da atribuição aumentada, A+=B é similar a A = A+B, exceto que A é avaliada apenas uma vez Versão 2.1: Adição de escopo estático à linguagem (antes era apenas local, à nível de módulo e namespace interno) e de um framework de warning para ajudar os desenvolvedores na remoção de recursos. Versão 2.2: O acesso às metaclasses torna-se mais fácil e menos perigoso. Versão 2.3: Ganho de rapidez, chega a ser 30% mais rápida que a versão 2.2 Versão 2.4: Um número de módulos que foram adicionados em Python 2.3 foram codados em C. Além disso, houve aumento de velocidade para o interpretador. Versão 2.5: Aumento da confiabilidade com o uso da ferramenta Buildbot (utilizada em testes contínuos). Ela permite detectar problemas mais rapidamente durante o desenvolvimento, gerando uma versão muito mais robusta. Mudanças com a manipulação de exceções, como a mudança das mesmas para formarem um novo estilo de classe, melhoraram o desempenho da versão. Versão 2.6: Foco na transição para a versão 3.0, mas ainda compatível com o código existente, removendo apenas sintaxe e recursos antigos. Versão 2.7: Programado para ser a última versão principal na série 2.x, contém muitas das características que foram lançadas primeiramente em Python 3.1 Python 2.x X Python 3.x Python 3.x foi projetado para corrigir algumas falhas de design da linguagem. Versão 3.0: -> Print deixa de ser um comando e passa a ser uma função -> O operador ‘/’ não depende mais de seus operandos, ou seja, a divisão de dois tipos inteiros não retorma mais um inteiro arredondado para baixo, mas sim um flutuante. Para divisões inteiras há o operador ‘//’ -> Algumas APIs deixam de retornar listas para retornarem views ou iteradores, como Zip e Map -> Simplificação de regras de comparação de ordem numérica de forma que comparações entre números e operandos que não tem valor de ordenação retornam um erro. -> Conceitos de texto e dados binários ao invés de strings Unicode e 8-bits. Ao misturar str e bytes, é retornado um erro. (Todo o texto é Unicode; entretanto, Unicode codificado é representado como dados binários. O tipo usado para armazenar texto é o str, o tipo para armazenar dados é bytes). A grande diferença com a situação do 2.x é que qualquer tentativa de misturar texto e dados no Python 3.0 retorna TypeError, enquanto que se você tentasse misturar strings Unicode e 8-bit em Python 2.x, funcionaria perfeitamente se a string 8-bit contesse apenas bytes de 7-bit(ASCII), mas retornaria o erro UnicodeDecodeError se contesse valores não-ASCII -> Mudanças na sintaxe: Alguns itens acrescentados, como a declaração ‘nonlocal’; alguns itens alterados, como nas cláusulas except e metaclass. A ferramenta 2to3 foi criada para permitir a portabilidade um programa escrito em Python 2 para Python 3. Premissas, usuário e domínio 1. Premissas As premissas dessa linguagem são produtividade, qualidade do software e manutenção. É uma linguagem pronta pra isso, com alta legibilidade e capacidade de escrita gerando alta capacidade de escrita para o programador e baixo custo de manutenibilidade. 2. Usuário O usuário característico de Python é o programador iniciante, pois é uma ótima linguagem para se aprender como primeira linguagem de programação devido a sua simplicidade e clareza e como é poderosa, pode-se obter resultados em pouco tempo. 3. Domínio A linguagem foi criada com o objetivo de aprendizado de uma lógica de programação. Com ela também é verificada uma enorme facilidade na manipulação de listas. Paradigma Python é uma linguagem de programação multiparadigma, ou seja, tem suporte para os paradigmas de orientação a objetos, procedural e funcional. Exemplo de orientação a objetos: class Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount Exemplos de procedural: try: fh = open("testfile", "w") fh.write("This is my test file for exception handling!!") except IOError: print "Error: can\'t find file or read data" Exemplo de funcional: def dobroLista(lista) print map(lambda elem: 2*elem, lista) Construtores 1. Tipos Python é uma linguagem que possui dois tipos primitivos: * Simples: boolean, int, long, float, complex e strings. * Compostos: listas, dicionários, tuplas e conjuntos. Exemplos: counter = 100 # An integer assignment miles = 1000.0 # A floating point name = "John" # A string complex = complex(3, 4) checker = True list = [ 'abcd', 786 , 2.23, 'john', 70.2 ] tuple = ( 'abcd', 786 , 2.23, 'john', 70.2 ) dict = {} dict1 = "one" dict = {1: 'one'} 2. Declarações Em Python, as funções podem ser declaradas de duas maneiras: * def: definição de uma função. * lamba: função anônima. Exemplos: def printme( str ): "This prints a passed string into this function" print str; return; sum = lambda arg1, arg2: arg1 + arg2; 3. Comandos As instruções de controle utilizadas em Python são: * if / elif / else * for * while Exemplos: var = 100 if var < 200: print "Expression value is less than 200" else: print "Could not find true expression" def fib(n): a, b = 0, 1 while a < n: print a, a, b = b, a+b words = 'window', 'defenestrate' for w in words: print w, len(w) Em Python temos os operadores e os delimitadores As palavras chaves da linguagem variou entre as versões, hoje temos a versão 3.x com 33 palavras reservadas e a versão 2.x com 31, apresentadas no próximo tópico. Avaliação da Linguagem 1. Legibilidade Python é uma linguagem de programação de alta legibilidade, pois possui poucos componentes básicos. Isso inclui palavras reservadas e caracteres especiais o que a torna uma linguagem clara e de fácil entendimento. Outro ponto que contribui bastante para a legibilidade de Python é a identação obrigatória de seus blocos. Possui sobrecarga de operadores e poucas instruções de controle. 2. Capacidade de escrita Python é uma linguagem com alta capacidade de escrita, pois com suporte da abstração e do paradigma funcional, ela pode ser altamente expressiva e poderosa. Outro ponto que contribui para a capacidade de escrita é o grande número de bibliotecas presentes nessa linguagem. Exemplo: import nicepic draw_house() 3. Confiabilidade A confiabilidade dessa linguagem é prejudicada pela checagem de tipos dinâmica e pela alocação por referência, que pode causar demora para verificação de erros simples e referência pendente, respectivamente. Uma das vantagem da linguagem nesse tópico é o tratamento de exceção nativo da linguagem. Exemplo: while True: try: x = int(raw_input("Please enter a number: ")) break except ValueError: print "Oops! That was no valid number. Try again..." 4. Custo Como Python é uma linguagem de alta legibilidade, o custo de escrever programas e o de manutenibilidade é bem baixo. No entanto, o custo de execução de programas é alto, uma vez que a velocidade de execução de uma linguagem interpretada é menor que a de uma linguagem compilada, pois todas as verificações são feitas durante o tempo de execução. 5. Outros 5. 1. Portabilidade Python é uma linguagem multiplataforma, ou seja, o mesmo código pode ser interpretado em sistemas diferentes, sem a necessidade de alteração do código, deixando as alterações necessárias a cabo do interpretador. Isso significa que a portabilidade é boa, 5.2. Generalidade É uma linguagem de propósito geral, ou seja, pode ser utilizada em diversas aplicações. O domínio de aplicação de Python é bem extenso e passa por aplicações web, interface gráfica, tratamento de XML, aplicações científicas, entre outras. 5.3. Qualidade da definição Python é uma linguagem bem definida, com gramática e tem toda a sua documentação online.https://www.python.org/ Por que Python? Python foi a linguagem escolhida para este projeto devido a diversos fatores, como: *Baixo custo de treinamento: de forma que os integrantes do grupo pudessem, mesmo sem experiência inicial com Python, desenvolver um aplicativo que utiliza operações de busca de dados na web (especificamente no Twitter nesta versão do aplicativo), integração com banco de dados e interface gráfica. *Alto nível de abstração com suporte de APIs e bibliotecas: o projeto se torna mais simples de ser implementado quando existe muito suporte para web e para criação de GUIs e forte ênfase em reuso de código. *Boa Legibilidade e Manutenibilidade: isso facilita o desenvolvimento, a manutenção do código e a própria expansão do aplicativo, visto que, por exemplo, adicionar buscas não apenas para o Twitter, mas também no Facebook e Instagram não se torna trabalhoso quando estes requisitos são atendidos. Especificidades * Tweepy Biblioteca que faz uma ponte entre a API do twitter com python. Sua funcionalidade é um paralelo direto à própria API do twitter, podendo portando realizar buscas por usuários, tweets e monitoramento de tweets. Estas, por sua vez, podem ser parametrizadas de diversas formas. * QT Designer 4.8.6 Qt Company é subsidiada por Digia Plc., que comprou os direitos deste projeto da Nokia. Qt provê um framework multiplataforma. Qt Designer é uma das ferramentas para aplicações Qt para projetar e construir interfaces gráficas do usuário (GUIs), desenvolvida em C++ utilizando a licença GNU LGPL versão 2.1 e GNU GPL versão 3.0. Desenvolvimento do tipo “Drag and drop”. Não é necessário saber programar para criar uma interface (importante para artistas, por exemplo). Gera o código da interface gráfica diretamente em Python. * MySQLdb É feita uma conexão com banco de dados Mysql para guardar os dados e assim, permitindo manipulações futuras e mineração de dados. Nossa aplicação O Twese possui como finalidade popular um banco de dados com informações do Twitter através de palavras-chave, realizando buscas por nome de usuário ou por tweets possibilitando armazenagem e análise destes dados. O código da aplicação está disponível neste link: http://lpunb.wikia.com/wiki/Grupo_3_-_C%C3%B3digo_da_Aplica%C3%A7%C3%A3o_Python_1/2015 Slides Os slides podem ser vistos acessando este link.